package com.zhiliao.destruction;

import java.io.Serializable;

public class SingleTon implements Serializable {

    private static final long serialVersionUID = -6849794470754667710L;

//volatile为了防止智能指令重排序，保证数据的可见性以及有序性

    private static volatile SingleTon instance;

    private SingleTon() {
        /*if (null != instance) {
            throw new RuntimeException();
        }*/
    }

    public static SingleTon getInstance() {

//第一个if用于判断咱们此时对象是否存在，如果对象存在也就是读操作，是不会存在线程安全问题的

        if (instance == null) {

//如果instance为null，说明对象没有创建，此时需要加锁，因为只要在对象创建的时候才会存在线程安全问题

            synchronized (SingleTon.class) {

                if (instance == null) {

                    instance = new SingleTon();

                }

            }

        }

        return instance;

    }
    public Object readResolve(){

        return SingleTon.getInstance();
    }
}
